package com.yuw.hw0302;


	import java.io.File;
	import java.io.FileFilter;
	import java.util.ArrayList;
	import java.util.Collections;
	import java.util.List;
	import java.util.Scanner;

	import org.junit.jupiter.api.Test;

	public class TestDriver {

		@Test
		public void test01() {
			System.out.println("请输入一个目录：");
			Scanner sc = new Scanner(System.in);
			String strPath = sc.nextLine();
			System.out.println("请输入查找的关键字：");
			String strkeyWord = sc.nextLine();
			// 调用子方法遍历该目录
			pintMe(strPath, strkeyWord.trim());
		}

		/**
		 * 非递归遍历目录中的所有文件
		 * 
		 * @param strPath
		 */
		private void pintMe(String strPath, String strkeyWord) {
			// 非递归，文件放入一个遍历的List中（或者栈中）
			List<File> lstFiles = new ArrayList<>();
			// 创建文件对象
			File file = new File(strPath);

			// 判断文件是否存在
			if (file.exists()) {
				// 将文件放入遍历链表中
				lstFiles.add(file);
				// 当文件遍历的链表不为空时，循环遍历所有的文件信息
				while (lstFiles != null && lstFiles.size() > 0) {
					// 取出第一个文件
					File subFile = lstFiles.remove(0);
					// 判断是否为目录
					if (subFile.isDirectory()) {
						// 打印
						System.out.println("目录：" + subFile.getAbsolutePath());
						// 获取目录中的所有的子文件
						File[] subFiles = subFile.listFiles(new FileFilter() {
							
							@Override
							public boolean accept(File f) {
								// 如果返回true，则该文件包含在listFiles方法的结果集中，否则，不包含
								if(f.isDirectory() || f.isFile() && f.getName().contains(strkeyWord)) {
									// 子目录和包含关键字的文件放入结果中
									return true;
								}
								return false;
							}
						});
						// 如果是目录，将所有的子文件放入遍历链表中
						Collections.addAll(lstFiles, subFiles);
					} else {
						// 文件 直接打印:输出包含关键字的文件信息
						//if (subFile.getName().contains(strkeyWord)) {
							System.out.println("文件：" + subFile.getAbsolutePath());
						//}
					}
				}
			}

		}
	}


